package br.uvv.Dao;

import java.util.List;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.primefaces.model.SortOrder;

import br.uvv.Model.Usuario;
import br.uvv.Util.DAOException;

@SuppressWarnings("unchecked")
public class UsuarioDAO extends DAO {

	private static final long serialVersionUID = 1644593689725160930L;

	public Usuario selecionar(Long id) throws DAOException  {
		return (Usuario) get(Usuario.class, id);
	}
	
	public List<Usuario> listar() throws DAOException{
		return (List<Usuario>) list(Usuario.class);
	}
	
	public void salvar(Usuario usuarioInstance) throws DAOException {
		save(usuarioInstance, usuarioInstance.getId());
	}
	
	public void remover(Usuario usuarioInstance) throws DAOException {
		delete(Usuario.class, usuarioInstance.getId());
	}
	
	public List<Usuario> listar(int first, int pageSize, String sortField, 
			SortOrder sortOrder, String nome) throws DAOException{
		Criterion[] filtros = { Restrictions.ilike("nome", "%" + nome + "%") };
		return (List<Usuario>) listPaginator(first, pageSize, sortField, sortOrder, Usuario.class, null, filtros);
	}
	
	public Integer count(String nome) throws DAOException {
		Criterion[] filtros = { Restrictions.ilike("nome", "%" + nome + "%") };
		return rowCount(Usuario.class, filtros);
	}

	public Integer countPorCliente(Long id) throws DAOException {
		Criterion[] filtros = { Restrictions.eq("cliente.id", id) };
		return rowCount(Usuario.class, filtros);
	}

	public Usuario selecionarComClienteEPerfil(Long id) throws DAOException {
		String[] fetchMode = { "cliente" , "perfil" };
		return (Usuario) get(Usuario.class, id, fetchMode);
	}

	public Usuario selecionarPorToken(String token) {
		// TODO Auto-generated method stub
		return null;
	}
}
